#include "user_led.h"
#include "user_beep.h"
#include "./lw_timer/lw_timer.h"
#include "./letter_shell/letter_shell_porting.h"
#include "./Flexible_Button/flexible_button.h"
#include "./OLED/OLED.h"

/********************静态变量定义********************/
static lw_timer_t btn_scan_timer; /*按键扫描定时器*/
static lw_timer_t oled_update_timer; /*OLED更新定时器*/
static lw_timer_t letter_shell_timer; /*letter shell任务定时器*/
static lw_timer_t sound_light_timer; /*声光提示定时器*/

/********************静态函数声明********************/
static void letter_shell_tim_cb(lw_timer_t* timer);
static void oled_update_tim_cb(lw_timer_t* timer);
static void btn_scan_tim_cb(lw_timer_t* timer);
static void sound_light_tim_cb(lw_timer_t* timer);

/********************全局函数定义********************/

/**
 * @brief	letter shell任务定时器启动函数
 */
void letter_shell_tim_start(void)
{
	lw_timer_start(&letter_shell_timer, letter_shell_tim_cb, NULL, 25, LW_TIMER_INFINITE);
}

/**
 * @brief	OLED任务定时器启动函数
 */
void oled_update_tim_start(void)
{
	lw_timer_start(&oled_update_timer, oled_update_tim_cb, NULL, 40, LW_TIMER_INFINITE);
}

/**
 * @brief	按键扫描定时器启动函数
 */
void btn_scan_tim_start(void)
{
	lw_timer_start(&btn_scan_timer, btn_scan_tim_cb, NULL, 20, LW_TIMER_INFINITE);
}

/**
 * @brief	声光提示定时器启动函数
 */
void sound_light_tim_start(void)
{
	lw_timer_start(&sound_light_timer, sound_light_tim_cb, NULL, 800, 1);
}

/********************静态函数定义********************/

/**
 * @brief	letter shell任务定时器的回调函数
 * @param	timer 软件定时器对象
 * @param	userData 用户数据
 */
static void letter_shell_tim_cb(lw_timer_t* timer)
{
	shell_task_handler(); /*执行shell任务*/
}

/**
 * @brief	OLED刷新任务定时器的回调函数
 * @param	timer 软件定时器对象
 * @param	userData 用户数据
 */
static void oled_update_tim_cb(lw_timer_t* timer)
{
	OLED_Update(); /*将显示缓冲区的内容更新到OLED上*/
} 

/**
 * @brief	按键扫描软件定时器超时回调函数
 * @param	timer 软件定时器对象
 * @param	userData 用户数据
 */
static void btn_scan_tim_cb(lw_timer_t* timer)
{
    flex_button_scan(); /*扫描按键*/
}

/**
 * @brief	声光提示软件定时器超时回调函数
 * @param	timer 软件定时器对象
 * @param	userData 用户数据
 */
static void sound_light_tim_cb(lw_timer_t* timer)
{
	led_reset();
	beep_reset();
}
